• Fundamentos de Internet

  • ¿Que es Internet?
  • Vocablos de Internet
  • Internet en la actualidad
  • Fundamentos de Programacion

  • Fundamentos de programacion
  • Formas DFD Graficos
  • Programacion en Java Netbeans
  • Repaso Programacion

  • Repaso Programacion
  • Formas DFD Graficos
  • Programacion en Java Netbeans
  • Programacion Uno

  • Programacion Uno
  • Consultas
  • Estructura de Datos

  • Repaso Programacion Uno
  • Graficacion 2D
  • Repaso Consultas
  • Arreglos
  • Colecciones y Ordenamientos
  • Programacion Orientado a Objetos

  • ¿Fundamentos de Progamacion?
  • Objetos Clases e Herencia
  • Constructores en Java
  • Fundamentos de Programacion (P.O.O)

    Existen cuatro conceptos fundamentales dentro de la Programación Orientada a Objetos que se relacionan entre sí y que nos permitirán tener las riendas de nuestro código:

    Abstracción:
    proceso mental de extracción de las características esenciales de algo, ignorando los detalles superfluos.

    Encapsulación:
    proceso por el que se ocultan los detalles del soporte de las características esenciales de una abstracción.

    Modularización:
    proceso de descomposición de un sistema en un conjunto de módulos o piezas independientes y cohesivos (con significado propio). Lo adecuado es conseguir los mínimos acoplamientos.

    Jerarquización:
    proceso de estructuración por el que se produce una organización (jerarquía) de un conjunto de elementos en grados o niveles de responsabilidad, incumbencia o composición entre otros.

    Si entiendes esos cuatro conceptos entenderás el porqué de la programación orientada a objetos y, consecuentemente, serás un mejor programador. Obviamente, en el vídeo Luis los explica mucho mejor, con ejemplos interesantes para ser capaces de entenderlo perfectamente. Además lo hace de una manera muy divertida, como comprobarás y nos anima a todos a tomarnos en serio nuestra profesión. .

    Las ventajas de POO

    La primera ventaja del concepto de objetos es que todo el código que tiene algo que ver con las naves espaciales se encuentra en un solo lugar. Otra ventaja es que los objetos pueden poseer atributos inherentes de la clase a la que pertenecen, por ejemplo, naves espaciales y asteroides podrían tener ambos una posición XY porque todos los objetos que pertenecen a la clase de los objetos en movimiento tiene una posición XY. Escribir códigos es más fácil porque se pueden conceptualizar como algo que le sucede a un objeto. Otra ventaja es que POO hace que los programas grandes sean más manejables. Si todas las ventanas pertenecen a una jerarquía de clases de ventanas y todo el código que se refiere a una ventana particular está dentro de esa ventana, todas las manipulaciones de ventana se pueden escribir como una sencilla transferencia de mensajes.

    Las desventajas de POO

    No todos los programas pueden ser modelados con exactitud por el modelo de objetos. Si lo que deseas es leer algunos datos, hacerles algo simple y escribir de nuevo, no tienes necesidad de definir clases y objetos. Sin embargo, en algunos lenguajes de POO, puede que tengas que realizar este paso extra. Otra desventaja es que si se fuerza el lenguaje en el concepto de programación orientada a objetos, se pierden algunas de las características de lenguajes útiles, como los "lenguajes funcionales". Otra desventaja el que concepto que un programador tiene de lo que constituye un objeto abstracto puede no coincidir con la visión de otro programador. Los objetos a menudo requieren una extensa documentación.

    POO – Objetos, Clases y Herencia Simple(P.O.O)

    La programación orientada a objetos (POO) ofrece elementos que facilitan el desarrollo de software en aspectos tales como modularización, reutilización de piezas de código (no copy/paste) y encapsulamiento (ocultar el estado de los objetos) Objetos:

    Se puede decir que un objeto es todo aquello que pueda ser identificable dentro de una especificación de requerimientos o problema y tenga las siguiente características:

    • Tenga estados definibles (abierto, cerrado).

    • Posea comportamientos asociados (puede correr, saltar, volar, etc). Éstos son denominados métodos.

    • Son capaces de interactuar/comunicarse con otros objetos por medio de sus métodos

    Una característica propia de este paradigma, es la transparencia entre la implementación a nivel de código y la funcionalidad que provee un método (no me interesa cómo lo haga, sólo que lo haga).

    Clases:

    Las clases son plantillas que agrupan comportamiento (métodos) y estados (atributos) de los futuros objetos. Los objetos son instancias de una clase. Usando el símil “variable – tipo” de la programación estructurada, se entiendo que un objeto es una variable que tiene el comportamiento y estados del tipo (objeto) Veamos la creación de la clase Persona

    public class Persona {

    public String nombre;

    public int edad;

    public void correr(){

    }

    }

    y dentro del cuerpo del programa instanciamos una nueva Persona denominada Esteban:

    public class Main {

    public static void main(String[] args) {

    Persona esteban = new Persona();

    }

    }

    Herencia

    hasta el momento no se ha visto nada más interesante que una forma más cómoda de escribir Estructura de datos, pero ¿qué pasa si por ejemplo, necesitamos extender el comportamiento de un objeto que posee las mismas características de comportamiento y estado que la Clase Persona y además tiene otras características propias?. Como ya se dijo la reutilización de código es fundamental en este paradigma y en casos como estos se expresa como Herencia, cuya estructura jerárquica nos permite extender clases heredando todo (comportamientos y estados) desde una clase padre o Super Clase. las clases que hereden de una Super Clase se denominan Clases Hijas o Sub Clases. Ejemplo: Imaginemos que una Persona ha sido expuesta a una extraña radiación y ahora tiene super poderes, por lo que no deja de ser persona, pero ahora tiene nuevos comportamientos y estados, por lo que diremos que la nueva clase SuperHeroe hereda de la clase Persona: Veamos el siguiente código en Java

    public class SuperHeroe extends Persona{

    //Atributos:

    public String nombreDeFiccion;

    //Metodos:

    public void correrMuyRapido(){

    //TODO: implementar

    }

    public void volar(){

    //TODO: implementar

    }

    }

    Nota: La palabra clave extends nos indica que SuperHeroe está heredando o extendiendoa la super clase Persona. Ahora veamos como se comporta esta nueva clase dentro del cuerpo del programa principal:

    public class Main {

    public static void main(String[] args) {

    // Instanciar al nuevo SuperHeroe:

    SuperHeroe superPersona = new SuperHeroe();

    //Estas son propiedades de Persona:

    superPersona.nombre = "Carlos Kent";

    superPersona.edad = 37;

    //Esta es propiedad de SuperHeroe:

    superPersona.nombreDeFiccion = "Super Carlos";

    //Estos son metodos de SuperHeroe:

    superPersona.volar();

    superPersona.correrMuyRapido();

    }

    }

    Con esto termino esta primera entrega, en la siguiente escribiré acerca de clases abstractas, interfaces y herencia múltiple.

    Ejemplo

    Copiright - Hernán Mejía - Armando Montero